/**
 * 页面模块生成脚本
 * 用法：node scripts/generate-page.js <页面名称>
 * 示例：node scripts/generate-page.js product-detail
 */

const fs = require('fs');
const path = require('path');

// 获取命令行参数
const pageName = process.argv[2];

if (!pageName) {
  console.error('请提供页面名称！');
  console.log('用法：node scripts/generate-page.js <页面名称>');
  console.log('示例：node scripts/generate-page.js product-detail');
  process.exit(1);
}

// 将页面名转换为首字母大写的驼峰形式
const pageNameCamel = pageName
  .split('-')
  .map(word => word.charAt(0).toUpperCase() + word.slice(1))
  .join('');

// 模板页面路径
const templatePath = path.join(__dirname, '../src/pages/index');
// 新页面路径
const newPagePath = path.join(__dirname, '../src/pages', pageName);

// 检查目录是否已存在
if (fs.existsSync(newPagePath)) {
  console.error(`错误：页面 ${pageName} 已存在！`);
  process.exit(1);
}

/**
 * 复制目录及文件
 * @param {string} src 源路径
 * @param {string} dest 目标路径
 */
function copyDir(src, dest) {
  // 创建目标目录
  fs.mkdirSync(dest, { recursive: true });

  // 读取源目录内容
  const entries = fs.readdirSync(src, { withFileTypes: true });

  for (const entry of entries) {
    const srcPath = path.join(src, entry.name);
    const destPath = path.join(dest, entry.name);

    if (entry.isDirectory()) {
      // 递归复制子目录
      copyDir(srcPath, destPath);
    } else {
      // 读取文件内容
      let content = fs.readFileSync(srcPath, 'utf8');

      // 替换内容中的名称
      content = content
        .replace(/IndexPage/g, `${pageNameCamel}Page`)
        .replace(/HomePage/g, `${pageNameCamel}Page`)
        .replace(/useIndexStore/g, `use${pageNameCamel}Store`)
        .replace(/indexStore/g, `${pageName.replace(/-([a-z])/g, (_, c) => c.toUpperCase())}Store`)
        .replace(/index-/g, `${pageName}-`)
        .replace(/\.index/g, `.${pageName}`)
        .replace(/首页/g, `${pageNameCamel}页面`);

      // 写入新文件
      fs.writeFileSync(destPath, content);
      console.log(`创建文件: ${destPath}`);
    }
  }
}

// 开始复制目录
console.log(`开始创建 ${pageName} 页面模块...`);
copyDir(templatePath, newPagePath);

// 更新app.config.ts，添加新页面
const appConfigPath = path.join(__dirname, '../src/app.config.ts');
let appConfig = fs.readFileSync(appConfigPath, 'utf8');

// 检查页面是否已在配置中
if (!appConfig.includes(`'pages/${pageName}/index'`)) {
  // 在pages数组中添加新页面
  appConfig = appConfig.replace(
    /pages\s*:\s*\[([\s\S]*?)\]/,
    (match, pagesList) => {
      // 保持原有缩进风格
      const indent = pagesList.match(/^\s*/)[0];
      return `pages: [${pagesList},\n${indent}'pages/${pageName}/index'\n${indent.slice(0, -2)}]`;
    }
  );

  fs.writeFileSync(appConfigPath, appConfig);
  console.log(`已更新 app.config.ts，添加页面路径: pages/${pageName}/index`);
}

console.log(`\n✅ ${pageName} 页面模块创建成功！`);
console.log(`路径: src/pages/${pageName}/`);
console.log('\n你还需要:');
console.log(`1. 检查并更新 src/pages/${pageName}/index.config.ts 中的配置`);
console.log(`2. 根据需要修改 src/pages/${pageName}/services 中的接口`);
console.log(`3. 根据需要修改 src/pages/${pageName}/store 中的状态管理`);
